/*
 *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

package org.webrtc;

import org.webrtc.PeerConnection;

/**
 * Easily storable/serializable version of a native C++ RTCCertificatePEM.
 */
public class RtcCertificatePem {
    /**
     * PEM string representation of the private key.
     */
    public final String privateKey;
    /**
     * PEM string representation of the certificate.
     */
    public final String certificate;
    /**
     * Default expiration time of 30 days.
     */
    private static final long DEFAULT_EXPIRY = 60 * 60 * 24 * 30;

    /**
     * Instantiate an RtcCertificatePem object from stored strings.
     */
    @CalledByNative
    public RtcCertificatePem(String privateKey, String certificate) {
        this.privateKey = privateKey;
        this.certificate = certificate;
    }

    @CalledByNative
    String getPrivateKey() {
        return privateKey;
    }

    @CalledByNative
    String getCertificate() {
        return certificate;
    }

    /**
     * Generate a new RtcCertificatePem with the default settings of KeyType = ECDSA and
     * expires = 30 days.
     */
    public static RtcCertificatePem generateCertificate() {
        return nativeGenerateCertificate(PeerConnection.KeyType.ECDSA, DEFAULT_EXPIRY);
    }

    /**
     * Generate a new RtcCertificatePem with a custom KeyType and the default setting of
     * expires = 30 days.
     */
    public static RtcCertificatePem generateCertificate(PeerConnection.KeyType keyType) {
        return nativeGenerateCertificate(keyType, DEFAULT_EXPIRY);
    }

    /**
     * Generate a new RtcCertificatePem with a custom expires and the default setting of
     * KeyType = ECDSA.
     */
    public static RtcCertificatePem generateCertificate(long expires) {
        return nativeGenerateCertificate(PeerConnection.KeyType.ECDSA, expires);
    }

    /**
     * Generate a new RtcCertificatePem with a custom KeyType and a custom expires.
     */
    public static RtcCertificatePem generateCertificate(
            PeerConnection.KeyType keyType, long expires) {
        return nativeGenerateCertificate(keyType, expires);
    }

    private static native RtcCertificatePem nativeGenerateCertificate(
            PeerConnection.KeyType keyType, long expires);
}
